package com.wyvoid.forum.dao.hibernate;

import com.wyvoid.core.persistent.Pagination;
import com.wyvoid.core.persistent.hibernate.HibernateDAO;
import com.wyvoid.core.persistent.hibernate.HibernatePage;
import com.wyvoid.forum.dao.IUserDAO;
import com.wyvoid.forum.domain.User;

import java.util.List;
import java.util.Map;

public class UserDAO extends HibernateDAO<User> implements IUserDAO {


    /**
     * 根据用户名查找用户信息
     *
     * @param username 用户名称
     * @return User 用户对象(查找的用户不存在时,返回null)
     */
    public User getUser(String username) {
        return doQueryUnique("from User as user where user.username=?", username);
    }

    /**
     * 根据用户名和密码查找用户信息
     *
     * @param username 用户名
     * @param password 用户密码
     * @return User 用户对象
     */
    public User findUser(String username, String password) {
        return doQueryUnique("from User as user where user.username=? and user.password=?", username, password);
    }

    /**
     * 根据用户角色列表用户
     *
     * @param roles
     * @return
     * @
     */
    public List findUsersByRole(String roles) {
        return doQueryList("form User as u where u.roles='" + roles + "'", true);
    }

    /**
     * 取得用户列表
     *
     * @param username 用户名关键字
     * @return QueryResult 用户列表
     */
    public HibernatePage<User> findUsers(String username, Map orderMap, Pagination pagination) {
        /*DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
     detachedCriteria.add(Restrictions.like("username", "%" + username + "%"));
     return super.findItemsByCriteria(detachedCriteria, orderMap, pagination);*/
        return null;
    }

    /**
     * 用户登录时更新登录时间和IP
     *
     * @param userId        用户编号
     * @param lastLoginTime 最后登陆时间
     * @param lastLoginIp   最后登陆的IP
     */
    public void updateLoginInfo(int userId, String lastLoginTime, String lastLoginIp) {

        super.executeHsql("update User set lastLoginTime='" + lastLoginTime + "',lastLoginIp='" + lastLoginIp + "',loginTimes=loginTimes+1 where id='" + userId + "'");

    }

    /**
     * 修改用户密码
     *
     * @param userId   用户名
     * @param password 新密码
     * @ 数据处理异常
     */
    public void updateUserPassword(int userId, String password) {

        super.executeHsql("update User set password='" + password + "' where id='" + userId + "'");

    }

    /**
     * 用户总数
     *
     * @
     */
    public long countUser() {
        return doQueryCount("select count(user.id) from User as user");
    }

    /**
     * 最新注册的用户
     *
     * @return
     * @
     */
    public User getNewestUser() {
        List<User> list = doQueryLimitList("from User order by registerTime desc", true, 1);
        if (list.size() > 0) {
            return list.get(0);
        } else {
            return null;
        }
    }

    /**
     * 更新用户角色
     *
     * @param username 用户名
     * @param roles    用户角色
     * @
     */
    public void updateRole(String username, String roles) {
        super.executeHsql("update User set roles='" + roles + "' where username='" + username + "'");
    }

    /**
     * 锁定用户
     *
     * @param userId 用户编号
     * @param isLock 是否锁定
     */
    public void lockUser(int userId, int isLock) {
        super.executeHsql("update User set isLock=" + isLock + " where id=" + userId);
    }

    /**
     * 更新用户角色
     *
     * @param userId 用户编号
     * @param roles  角色
     * @
     */
    public void updateUserRoles(int userId, String roles) {
        super.executeHsql("update User set roles=" + roles + " where id=" + userId);
    }

}
